package com.gengzp.mq.common.utils;

import java.security.SecureRandom;

/**
 * @ClassName RandomUtils
 * @Description 随机值工具类
 * @Author gengzp
 * @Date 2025/6/8 14:56
 */
public class GengzpMqRandomUtils {

    /**
     * 字符集
     */
    private static final String ALLOWED_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    /**
     * 默认字符串长度: 32
     */
    private static final int DEFAULT_LENGTH = 32;

    /**
     * SecureRandom 随机值工具类
     */
    private static final SecureRandom SECURE_RANDOM = new SecureRandom();

    private GengzpMqRandomUtils() {
    }

    /**
     * 生成一个32位长度的随机字符串，使用SecureRandom确保更高的随机性。
     * 字符集包含大小写字母和数字，共62个字符。
     *
     * @return 随机生成的字符串
     */
    public static String generateHighEntropyRandomString() {
        StringBuilder sb = new StringBuilder(DEFAULT_LENGTH);
        for (int i = 0; i < DEFAULT_LENGTH; i++) {
            int randomIndex = SECURE_RANDOM.nextInt(ALLOWED_CHARS.length());
            sb.append(ALLOWED_CHARS.charAt(randomIndex));
        }
        return sb.toString();
    }

    /**
     * 生成一个指定长度的随机字符串，使用SecureRandom确保更高的随机性。
     *
     * @param length 字符串长度
     * @return 随机生成的字符串
     */
    public static String generateHighEntropyRandomString(int length) {
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            int randomIndex = SECURE_RANDOM.nextInt(ALLOWED_CHARS.length());
            sb.append(ALLOWED_CHARS.charAt(randomIndex));
        }
        return sb.toString();
    }

}
